<?php
/**
 * @package PWE.controler
 * @author Gmax <gmaxfr78@gmail.com>
 */
class mailer extends controler{
    /**
    * envoi un mail au destinataire selon le model $type choisi
    * - contact
	*
    * @param string $type
    * @param \modele_user $destinataire
    * @param string $content
    */
    public static function sendMail($type,$destinataire,$content=''){
        $headers = self::_getHeaders($type,$destinataire);
        $to = self::getMailContact();
        $subject = self::_getSubject($type);
        $message = self::_getContent($type,$destinataire,$content);
        
        if(DEBUG_MODE){
            self::debug($to, self::_encodingOutput($subject), self::_encodingOutput($message), $headers);
        }else{
            mail($to, self::_encodingOutput($subject), self::_encodingOutput($message), $headers);
        }
    }
    
    private static function debug($to, $subject, $message, $headers){
        echo '<pre>';
        print_r($headers);
        echo '</pre>';
        echo 'sujet mail : '.$subject.'<br/>';
        echo 'destinataire : '.$to.'<br/>';
        echo 'contenu du mail : '.$message.'<br/>';
        //exit;
    }
    /**
     * construit le sujet du mail
     * @param string $type
     * @return string
     */
    private static function _getSubject($type){
        $subject = 'Envoi depuis le site '.PWE::getSiteName().' : ';
        switch($type){
            case 'contact':{
                $subject .= 'Demande de contact'; 
                break;
            }
            case 'contact-valide':{
                $subject .= 'Demande de contact'; 
                break;
            }
            case 'commande':{
                $subject = 'Commande depuis le site '.PWE::getSiteName();
                break;
            }
            case 'commande-valide':{
                $subject = 'Validation de votre commande sur '.PWE::getSiteName();
                break;
            }
            case 'inscription':{
                $subject .= 'Inscription à la newsletter';
                break;
            }
            case 'reservation':{
                $subject .= 'Demande de réservation';
                break;
            }
            case 'mise-en-relation':{
                $subject .= 'Demande de mise en relation';
                break;
            }
            case 'relation-valide':{
                $subject .= 'réception de votre demande';
                break;
            }
            case 'concours':{
                $subject .= 'Inscription au concours';
                break;
            }
            case 'concours-valide':{
                $subject .= 'Validation de votre inscription au concours';
                break;
            }
        }
        return $subject;
    }
    
    /**
     * construction de l'en-tete du mail
     * @param \modele_user $destinataire
     * @return string
     */
    private static function _getHeaders($type,$destinataire){
        // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
        switch ($type){
            case 'contact-valide':{
                $headers .= 'To: '.$destinataire->getPrenom().' '.$destinataire->getNom().' <'.$destinataire->getEmail().'>'."\r\n";
                $headers .= 'From: '.self::getNameSupport().' <'.self::getMailSupport().'>'."\r\n";
                break;
            }
            case 'commande-valide':{
                $headers .= 'To: '.$destinataire->getPrenom().' '.$destinataire->getNom().' <'.$destinataire->getEmail().'>'."\r\n";
                $headers .= 'From: '.self::getNameSupport().' <'.self::getMailSupport().'>'."\r\n";
                break;
            }
            case 'relation-valide':{
                $headers .= 'To: '.$destinataire->getPrenom().' '.$destinataire->getNom().' <'.$destinataire->getEmail().'>'."\r\n";
                $headers .= 'From: '.self::getNameContact().' <'.self::getMailContact().'>'."\r\n";
                break;
            }
            case 'concours-valide':{
                $headers .= 'To: '.$destinataire->getPrenom().' '.$destinataire->getNom().' <'.$destinataire->getEmail().'>'."\r\n";
                $headers .= 'From: '.self::getNameSupport().' <'.self::getMailSupport().'>'."\r\n";
                break;
            }
            case 'mise-en-relation':{
                $headers .= 'To: '.self::getNameService().' <'.self::getMailService().'>'."\r\n";
                $headers .= 'From: '.$destinataire->getPrenom().' '.$destinataire->getNom().' <'.$destinataire->getEmail().'>'."\r\n";
                break;
            }
            default :{
                $headers .= 'To: '.self::getNameContact().' <'.self::getMailContact().'>'."\r\n";
                $headers .= 'From: '.$destinataire->getPrenom().' '.$destinataire->getNom().' <'.$destinataire->getEmail().'>'."\r\n";
                break;
            }
        }
        
        $headers .= 'Reply-To: '.$destinataire->getEmail()."\r\n";
        $headers .= 'X-Mailer: PHP/'.phpversion();
        
        return $headers;
    }
    
    private static function _getContent($type,$destinataire,$content=''){
        ob_start();
        $baseUrl = self::getBaseURL();
        include(self::_getMailTemplatePath($type));
        $message = ob_get_contents();
        ob_end_clean();
        return $message;
    }
    
    private static function _getMailTemplatePath($type){
        $path = self::getThemePath().'/mail/'.$type.'.php';
        if(file_exists($path)){
            return $path;
        }else{
            return self::getThemePath().'/mail/default.php';
        }
    }
    
    private static function _encodingOutput($string){
        return encoding::toUTF8(html_entity_decode(stripslashes($string)));
    }
}

?>
